最近在開啟新的side project,要用"偽"粒子系統來優化粒子生命(particle life),簡單來說就是做我最擅長的動畫,不過從底層邏輯說,所謂直接操作的動畫路徑(位移),就是速度的積分,加速度的兩次積分,本質上並沒有不同就是了,但在視覺上有望解決glitch的問題。即粒子受到過多的引力拉扯,導致看起來像出錯一般高頻振動,且粒子間彼此牽引,使其效果越放越大,粒子數越多越嚴重,換句話說,粒子生命在相同的參數設定下,有其數量的上限。
於是乎,去了解了一下,其所謂的微分方程(Lotka-Volterra equation)別稱掠食者—獵物方程,是用來描述族群繁衍時的壯大跟萎縮,想當然的,獵物被吃光的話,掠食者就會自然下降,接著獵物又慢慢增加,以此循環。透過這兩個族群的關係,它產生了一張XY軸的圖形,看起來酷似星空,我也產生了一種欲望:
讓它動起來!
然後它就被我改的面目全非了哈哈哈
在這個二元二次方程式中,有四個參數,分別為alpha、beta、gamma、delta,代表了族群的生育率及死亡率,通過調整參數,可以影響線段走向和中心點的位置。此外我也設計的一個更為直觀的功能,利用滑鼠便能更方便的觀察。
會把這拿出來說,是因為這是很重要的關鍵字,用這個來搜尋,能找到數學上有趣的圖形方程。
可以把它理解為:Lotka Volterra的中心十字線(參考影片)
用術語描述,則是零斜線,在這條線上,物種的增減值恰好為0。並且我們通過方程式了解到,兩條線分別為X=alpha/beta,Y=gamma/delta,我將其預設皆為1/2,也就是畫面的正中心。
,
說了這麼多,它其實很接近一種"紋理",在參數不變的情況下,我只有把粒子的相對位置改變,就能看到一種酷似旋轉的效果,這既可以說是人眼的錯覺,也可以說Lotka Volterra所添加的線段,賦予了粒子方向性。而粒子則代表了一種"光影"效果,只有粒子靠近的時候,才會照亮黑暗的畫面,看見紋理。
首先,可以嘗試把Vector Size歸零,你便會發現,由於線段長度歸零,Lotka Volterra的效果消失了,此時可以很清楚看到粒子的運動方式,平常時,我則推薦調整至約15~30的範圍。再來搭配滑鼠跟隨的功能,可以觀察紋理的改變,如果看不清楚的話,就按下停止動畫,先讓畫面靜止吧!
因為人眼看物體有自動補禎的效果,簡稱腦補,才使得動畫的製作有其龐大魅力,如果你認為自己被眼睛騙了,那麼就將Transform Speed減少吧,透過速度的變慢,可以更清楚的看到在粒子運動時,線段是如何改變它的方向。要是還是看不清楚,就將它設為0!看哪,畫面靜止了,甚至,把它設定為負值,哎!時間倒退了,再也不用擔心錯過嚕!
做為開篇還是挺華麗的,很符合我的個性(XD?,後續還會出兩三篇解釋技術細節和系統設計,並且慢慢堆疊、構建出上述的偽粒子系統。
最後~Caco是我玩遊戲用的暱稱,這次的專案就像我的遊樂場一樣!
我是Caco,也是Jerry,下次見!